package com.epin.business.system.service;

import java.util.List;

import org.springframework.dao.DataAccessException;

import com.baomidou.mybatisplus.plugins.Page;
import com.baomidou.mybatisplus.service.IService;
import com.epin.base.exception.check.RecordRepeatException;
import com.epin.business.system.entity.Role;
import com.epin.business.system.entity.User;

/**
 * <p>
 * 服务类
 * </p>
 *
 * @author fujiajun
 * @since 2017-06-16
 */
public interface RoleService extends IService<Role> {
	
	
	/**
	 * <p>查找角色列表</p>
	 * 
	 * @param pageNumber 当前页面号
	 * @param pageSize 每页默认的结果数
	 * @param companyId  公司ID
	 * @param keyword 关键字
	 * 
	 * @return Page<>
	 * 
	 * @author fujiajun
	 * @since 2017-06-16
	 */
	Page<Role> selectRolesPage(Integer pageNumber, Integer pageSize, Integer companyId, String keyword);
	
	
	/**
	 * <p>根据公司ID查找公司角色</p>
	 * 
	 * @param companyId 公司ID
	 * 
	 * @return List
	 * 
	 * @author fujiajun
	 * @since 2017-09-22
	 */
	List<Role> selectRolesByCompanyId(Integer companyId);
	
	
	/**
	 * <p>根据公司ID查找公司所有角色，包括默认角色</p>
	 * 
	 * @param companyId 公司ID
	 * 
	 * @return List
	 * 
	 * @author fujiajun
	 * @since 2017-09-22
	 */
	List<Role> selectAllRolesByCompanyId(Integer companyId);
	
	
	/**
	 * <p>根据公司UID查找公司所有角色，包括默认角色</p>
	 * 
	 * @param companyUId 公司UID
	 * 
	 * @return List
	 * 
	 * @author fujiajun
	 * @since 2017-09-22
	 */
	List<Role> selectAllRolesByCompanyUId(String companyUId);
	
	
	/**
	 * <p>根据公司ID查找默认角色</p>
	 * 
	 * 
	 * @return List
	 * 
	 * @author fujiajun
	 * @since 2017-09-22
	 */
	List<Role> selectDefaultRoles();
	
	
	/**
	 * <p>添加或修改角色</p>
	 * 
	 * @param id 角色ID
	 * @param rInfo 角色信息
	 * @param operator 当前操作人
	 * 
	 * @return boolean
	 * @throws RecordRepeatException
	 * 
	 * @author fujiajun
	 * @since 2017-09-22
	 */
	boolean insertOrUpdateRole(Integer id, Role rInfo, User operator) throws RecordRepeatException;
	
	
	/**
	 * <p>根据公司ID添加默认角色</p>
	 * 
	 * @param companyId 公司ID
	 * 
	 * @return boolean
	 * 
	 * @author fujiajun
	 * @since 2017-09-15
	 */
	boolean insertDefaultRolesByCompanyId(Integer companyId);
	
	
	/**
	 * <p>根据ID删除角色</p>
	 * 
	 * @param roleId 角色ID
	 * 
	 * @return boolean
	 * 
	 * @author fujiajun
	 * @since 2017-06-16
	 */
	boolean deleteRoleResource(Integer roleId);
	
	
	/**
	 * <p>根据角色id数组删除角色</p>
	 * 
	 * @param ids
	 * 
	 * @throws DataAccessException
	 * @return boolean
	 * 
	 * @author fujiajun
	 * @since 2017-06-16
	 */
	boolean deleteRolesByIds(List<Integer> ids) throws DataAccessException;
	
	
	/**
	 * <p>保存角色权限</p>
	 * 
	 * @param roleId 角色ID
	 * @param resourceIds 资源ID列表
	 * 
	 * @return boolean
	 * 
	 * @author fujiajun
	 * @since 2017-06-16
	 */
	boolean savePermission(Integer roleId, List<Integer> resourceIds);
	
	
}
